package com.landary.parameterrplacement.service;

import com.landary.parameterrplacement.entity.MkOrgUser;
import com.landary.parameterrplacement.entity.MkUserFdCustomProps;
import com.landary.parameterrplacement.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.regex.Pattern;

/**
 * @author 刘欣
 * @createTime 2023/8/2 10:53
 * @description 门户与mk系统用户参数装换
 */
@Service
@Slf4j
public class UserParamsConversionService {
    public MkOrgUser userParamsConversion(User user) throws Exception {
        if (user == null) {
            throw new Exception("没有获取到门户用户信息！");
        }
        log.info("================================人员参数开始转换================================");
        MkOrgUser mkOrgUser = new MkOrgUser();
        //扩展站实体
        MkUserFdCustomProps mkDeptFdCustomProps = new MkUserFdCustomProps();
        //fdId ==> avicUserAccount
        if (!StringUtils.isEmpty(user.getAvicUserAccount())) {
            mkOrgUser.setFdId("person:" + user.getAvicUserAccount());
        } else {
            //fdId非空校验
            mkOrgUser.setFdId("null");
            log.error("人员webservice接口同步的avicUserAccount为空");
        }
        //电子邮件
        if (!StringUtils.isEmpty(user.getMail())) {
            mkOrgUser.setFdEmail(user.getMail());
        } else {
            log.error("人员webservice接口同步的mail为空");
        }
        //来源系统标识
        mkOrgUser.setFdSourceSystem("601portal");
        //登入名
        if (!StringUtils.isEmpty(user.getAvicUserAccount())) {
            mkOrgUser.setFdLoginName(user.getAvicUserAccount());
        } else {
            mkOrgUser.setFdLoginName("null");
            log.error("人员webservice接口同步的avicUserAccount为空，同步的登入名为空");
        }

        //用户姓名
        if (!StringUtils.isEmpty(user.getFullName())) {
            mkOrgUser.setFdName(user.getFullName());
        } else {
            mkOrgUser.setFdName("null");
            log.error("人员webservice接口同步的fullname为空");
        }

        //所在部门编码
        if (!StringUtils.isEmpty(user.getAvicDeptCode())) {
            mkOrgUser.setFdParent("dept:" + user.getAvicDeptCode());
        } else {
            log.error("人员webservice接口同步的AvicDeptCode为空");
        }
        //webservice接口推过来的数据都是有效的
        if (user.getIsAvailable() != null) {
            mkOrgUser.setFdIsAvailable(user.getIsAvailable());
        } else {
            mkOrgUser.setFdIsAvailable(true);
            log.error("人员webservice接口同步的available为空");
        }

        //人员排序
        if (user.getAvicSortOrder() != null) {
            mkOrgUser.setFdOrder(user.getAvicSortOrder());
        } else {
            log.error("人员webservice接口同步的sortOrder为空");
        }
        //人员密级
        String avicUserSecurity = user.getAvicUserSecurity();
        if (!StringUtils.isEmpty(avicUserSecurity)) {
            if ("0".equals(avicUserSecurity)) {
                mkDeptFdCustomProps.setAvicUserSecurity("非涉密");
            }
            if ("1".equals(avicUserSecurity)) {
                mkDeptFdCustomProps.setAvicUserSecurity("一般涉密人员");
            }
            if ("2".equals(avicUserSecurity)) {
                mkDeptFdCustomProps.setAvicUserSecurity("重要涉密人员");
            }
            if ("3".equals(avicUserSecurity)) {
                mkDeptFdCustomProps.setAvicUserSecurity("核心涉密人员");
            }
        } else {
            log.error("人员webservice接口同步的avicUserSecurity为空");
        }

        //岗位
        if (!StringUtils.isEmpty(user.getAvicSimpleTitle())) {
            mkOrgUser.setFdMainPost("post:" + user.getAvicSimpleTitle());
        } else {
            log.error("人员webservice接口同步的AvicSimpleTitle为空");
        }

        //人员编号
        if (!StringUtils.isEmpty(user.getAvicLocalCode())) {
            mkOrgUser.setFdNo(user.getAvicLocalCode());
        } else {
            mkOrgUser.setFdNo("null");
            log.error("人员webservice接口同步的AvicLocalCode为空");
        }
        //人员类别
        if (!StringUtils.isEmpty(user.getAvicEmployeeType())) {
            mkDeptFdCustomProps.setAvicEmployeeTyep(user.getAvicEmployeeType());
        } else {
            log.error("人员webservice接口同步的AvicEmployeeType为空");
        }
        //所属公司名称
        if (!StringUtils.isEmpty(user.getAvicCorpName())) {
            mkDeptFdCustomProps.setAviCorpName(user.getAvicCorpName());
        } else {
            log.error("人员webservice接口同步的AvicCorpName为空");
        }
        //集团编码
        if (!StringUtils.isEmpty(user.getCn())) {
            mkDeptFdCustomProps.setCn(user.getCn());
        } else {
            log.error("人员webservice接口同步的cn为空");
        }
        //身份证号
        if (!StringUtils.isEmpty(user.getAvicIdCardNumber())) {
            mkDeptFdCustomProps.setAvicIdCardNumber(user.getAvicIdCardNumber());
            setGender(user, mkOrgUser);
        } else {
            mkOrgUser.setFdSex("UN");
            log.error("人员webservice接口同步的avicIdCardNumber为空");
        }
        //设置是否为党员默认值为false
        mkDeptFdCustomProps.setIsPartyMember("false");
        //扩展字段赋值
        mkOrgUser.setFdCustomProps(mkDeptFdCustomProps);
//        log.info("门户与mk系统用户参数装换" + mkOrgUser);
        log.info("================================人员参数转换结束================================");
        return mkOrgUser;
    }

    /**
     * 根据身份证号判断性别
     *
     * @param user
     * @param mkOrgUser
     */
    private static void setGender(User user, MkOrgUser mkOrgUser) {
        //校验身份证格式是否正确，获取第17位判断性别
        String avicIdCardNumber = user.getAvicIdCardNumber();
        boolean idCardValid = isIDCardValid(avicIdCardNumber);
        if (idCardValid) {
            //身份证格式正确获取第17位
            char identityTagBit = avicIdCardNumber.charAt(16);
            if (identityTagBit % 2 == 0) {
                mkOrgUser.setFdSex("F");
                System.out.println("女性");
            } else {
                mkOrgUser.setFdSex("M");
                System.out.println("男性");
            }
        } else {
            mkOrgUser.setFdSex("UN");
            log.error("人员webservice接口同步的身份证格式有误,无法判断性别，根据系统默认设置为女");
        }
    }


    public static boolean isIDCardValid(String idCard) {
        // 中国大陆居民身份证号码的正则表达式
        String regex = "^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";
        Pattern pattern = Pattern.compile(regex);
        return pattern.matcher(idCard).matches();
    }
}
